/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package unmsm.fisi.tesis.entidad;

import unmsm.fisi.tesis.dao.PoblacionDAO;

/**
 *
 * @author Jhon
 */
public class Configuracion {

      private int codigoConfiguracion;
	  private int numeroPacientes;
      private int numeroPoblacion;
      private double probabilidadCrossover_x;
      private double probabilidadMutacion_y;
      private int reglasToUsarOrganizacion[];
      private int numReglasDeConocimiento;
      private int datoParada;
      private String condicionParada;
      private int numGeneraciones;
      
      private int numHallazgos;
      private String metodo;
      
      private String metodoSeleccion;
      private String operadorCroosover;
      private String operadorMutacion;

    public Configuracion() {
    }

    
    public String getMetodo() {
		return metodo;
	}


	public void setMetodo(String metodo) {
		this.metodo = metodo;
	}


	public Configuracion(int numeroPacientes, int numeroPoblacion,
			double probabilidadCrossover_x, double probabilidadMutacion_y,
			int[] reglasToUsarOrganizacion, int numGeneraciones, int datoParada, String condicionParada, int numHallazgos, String metodo,
			String selectedMetodoSeleccion,String selectedOperadorCroosover,String selectedOperadorMutacion) {
		//super();
		this.numeroPacientes = numeroPacientes;
		this.numeroPoblacion = numeroPoblacion;
		this.probabilidadCrossover_x = probabilidadCrossover_x;
		this.probabilidadMutacion_y = probabilidadMutacion_y;
		this.reglasToUsarOrganizacion = reglasToUsarOrganizacion;
		this.datoParada = datoParada;
		this.condicionParada = condicionParada;
		this.numGeneraciones = numGeneraciones;
		this.numHallazgos = numHallazgos;
		this.metodo = metodo;
		this.metodoSeleccion = selectedMetodoSeleccion;
		this.operadorCroosover = selectedOperadorCroosover;
		this.operadorMutacion = selectedOperadorMutacion;
	}

	public boolean isCumpleCondicion(long tiempoInicial, long tiempoFinal, int contadorGeneraciones, double valorAdaptacion){
		

		if(getCondicionParada().trim().equals("Tiempo Procesamiento Limite")){
			return (tiempoFinal-tiempoInicial)/(60 * 1000) < (getDatoParada()); 
			
		}
		
		if(getCondicionParada().trim().equals("Maximo Numero Generaciones")){
			
			return contadorGeneraciones <= getDatoParada();
		}
		
		if(getCondicionParada().trim().equals("Calidad Fitness")){
		
			return  (valorAdaptacion*100) < getDatoParada(); 
		}
		
		if(getCondicionParada().equals("Poblacion Similar")){
			
			// aqui va el metodo de llamada para obtener un boolean
			return PoblacionDAO.obtenerCondicionPoblacionSimilar(contadorGeneraciones);
		}
		
		return false;
		
	}
	
	
	public int getNumeroPacientes() {
		return numeroPacientes;
	}


	public void setNumeroPacientes(int numeroPacientes) {
		this.numeroPacientes = numeroPacientes;
	}


	public int getNumeroPoblacion() {
		return numeroPoblacion;
	}


	public void setNumeroPoblacion(int numeroPoblacion) {
		this.numeroPoblacion = numeroPoblacion;
	}


	public double getProbabilidadCrossover_x() {
		return probabilidadCrossover_x;
	}


	public void setProbabilidadCrossover_x(double probabilidadCrossover_x) {
		this.probabilidadCrossover_x = probabilidadCrossover_x;
	}


	public double getProbabilidadMutacion_y() {
		return probabilidadMutacion_y;
	}


	public void setProbabilidadMutacion_y(double probabilidadMutacion_y) {
		this.probabilidadMutacion_y = probabilidadMutacion_y;
	}




	public int[] getReglasToUsarOrganizacion() {
		return reglasToUsarOrganizacion;
	}


	public void setReglasToUsarOrganizacion(int[] reglasToUsarOrganizacion) {
		this.reglasToUsarOrganizacion = reglasToUsarOrganizacion;
	}


	public int getDatoParada() {
		return datoParada;
	}


	public void setDatoParada(int datoParada) {
		this.datoParada = datoParada;
	}


	public int getNumHallazgos() {
		return numHallazgos;
	}


	public void setNumHallazgos(int numHallazgos) {
		this.numHallazgos = numHallazgos;
	}


	public int getCodigoConfiguracion() {
		return codigoConfiguracion;
	}


	public void setCodigoConfiguracion(int codigoConfiguracion) {
		this.codigoConfiguracion = codigoConfiguracion;
	}


	public int getNumReglasDeConocimiento() {
		return numReglasDeConocimiento;
	}


	public void setNumReglasDeConocimiento(int numReglasDeConocimiento) {
		this.numReglasDeConocimiento = numReglasDeConocimiento;
	}


	public String getCondicionParada() {
		return condicionParada;
	}


	public void setCondicionParada(String condicionParada) {
		this.condicionParada = condicionParada;
	}


	public int getNumGeneraciones() {
		return numGeneraciones;
	}


	public void setNumGeneraciones(int numGeneraciones) {
		this.numGeneraciones = numGeneraciones;
	}


	public String getMetodoSeleccion() {
		return metodoSeleccion;
	}


	public void setMetodoSeleccion(String metodoSeleccion) {
		this.metodoSeleccion = metodoSeleccion;
	}


	public String getOperadorCroosover() {
		return operadorCroosover;
	}


	public void setOperadorCroosover(String operadorCroosover) {
		this.operadorCroosover = operadorCroosover;
	}


	public String getOperadorMutacion() {
		return operadorMutacion;
	}


	public void setOperadorMutacion(String operadorMutacion) {
		this.operadorMutacion = operadorMutacion;
	}



}
